package com.app.micaihu.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.text.TextUtils;
import android.widget.Toast;

import com.app.micaihu.app.AppApplication;
import com.app.micaihu.configure.AppConfigTools;
import com.app.utils.util.ToastUtils;
import com.app.utils.util.image.ImageUtils;
import com.baidu.mobstat.StatService;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class AndroidNativeShareUtils {

	private Context context;
	/** 文本类型 */
	public static int TEXT = 0;
	/** 图片类型 */
	public static int DRAWABLE = 1;

	public AndroidNativeShareUtils(Context context) {
		this.context = context;
	}

	/**
	 * 分享到QQ好友
	 * 
	 * @param msgTitle
	 *            （分享标题）
	 * @param msgText
	 *            （分享内容）
	 * @param type
	 *            （分享类型）
	 * @param imgpath
	 *            （分享图片，若分享类型为AndroidShare.TEXT，则可以为null）
	 */
	public void shareQQFriend(String msgTitle, String msgText, int type,
			String imgpath,String typeName) {

		shareMsg("com.tencent.mobileqq",
				"com.tencent.mobileqq.activity.JumpActivity", "QQ", msgTitle,
				msgText, type, imgpath, typeName);
	}

	/**
	 * 分享到微信好友
	 * 
	 * @param msgTitle
	 *            （分享标题）
	 * @param msgText
	 *            （分享内容）
	 * @param imgpath
	 *            （分享图片，若分享类型为AndroidShare.TEXT，则可以为null）
	 */
	public void shareWeChatFriend(String msgTitle, String msgText, String imgpath,String typeName) {

		shareMsg("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI", "微信",
				msgTitle, msgText, AndroidNativeShareUtils.TEXT, imgpath,typeName);
	}

	/**
	 * 分享到微信朋友圈（分享朋友圈一定需要图片）
	 * 
	 * @param msgTitle
	 *            （分享标题）
	 * @param msgText
	 *            （分享内容）
	 * @param imgPath
	 *            （分享图片）
	 */
	public void shareWeChatFriendCircle(String msgTitle, String msgText,
			String imgPath,String typeName) {

		shareMsg("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI",
				"微信", msgTitle, msgText, AndroidNativeShareUtils.DRAWABLE, imgPath,typeName);
	}


	/**
	 * 分享到微信好友
	 *
	 * @param msgTitle （分享标题）
	 * @param msgText  （分享内容）
	 * @param imgpath  （分享图片，若分享类型为AndroidShare.TEXT，则可以为null）
	 */
	public void shareWeChatFriend(String msgTitle, String msgText, int type, String imgpath,String typename) {

		shareMsg("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI", "微信",
				msgTitle, msgText, type, imgpath, typename);
	}


	/**
	 * 下载图片分享朋友圈
	 * @param msgTitle
	 * @param msgText
	 * @param imgUrl
	 * @param typeName
	 */
	public void shareWeChatFriendCircleTodownload(final String msgTitle, final String msgText,
										String imgUrl,final String typeName) {
		if(TextUtils.isEmpty(imgUrl)){
			ToastUtils.showText("图片获取失败,请重试");
			return;
		}
		String name = imgUrl.substring(imgUrl.lastIndexOf("/")+1)+".jpg";
		OkHttp3Helper.getInstance().downAsynFile_Cache(imgUrl,
				AppConfigTools.USERSAVEIMG, name, new OkHttp3Helper.OnDownLoadResponCallBack() {

					@Override
					public void onStart() {
						if (context instanceof Activity) {
							DialogUtils.getInstance().showProgressDialog((Activity) context, "正在分享...");
						}
					}

					@Override
					public void onSucess(File file) {
						DialogUtils.getInstance().dismissProgressDialog();
						if (file != null) {
							shareMsg("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI",
									"微信", msgTitle, msgText, AndroidNativeShareUtils.DRAWABLE, file.getAbsolutePath(), typeName);

						}
					}

					@Override
					public void onFailure() {
						DialogUtils.getInstance().dismissProgressDialog();
						try {
							ToastUtils.showText("分享图片下载失败,请重试");
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				});

	}


	/**
	 * 分享到微信朋友圈（分享朋友圈一定需要图片）
	 *
	 * @param msgTitle
	 *            （分享标题）
	 * @param msgText
	 *            （分享内容）
	 * @param imgPath
	 *            （分享图片）
	 */
	public void shareWeChatFriendCircle(String msgTitle, String msgText,
										ArrayList<File> imgPath,String typeName) {
		shareMsg("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI",
				"微信", msgTitle, msgText, AndroidNativeShareUtils.DRAWABLE, imgPath, typeName);
	}

	/**
	 * 分享到其它
	 * 
	 * @param msgTitle
	 *            （分享标题）
	 * @param msgText
	 *            （分享内容）
	 * @param type
	 *            （分享类型）
	 * @param imgpath
	 *            （分享图片，若分享类型为AndroidShare.TEXT，则可以为null）
	 */
	public void shareOthers(String msgTitle, String msgText, int type,
			String imgpath,String typeName) {

		shareMsg("", "", "其他", msgTitle, msgText, type, imgpath, typeName);
	}

	/**
	 * 点击分享的代码
	 * 
	 * @param packageName
	 *            （包名）
	 * @param activityName
	 *            （类名）
	 * @param appname
	 *            （应用名）
	 * @param msgTitle
	 *            （标题）
	 * @param msgText
	 *            （内容）
	 * @param type
	 *            （发送类型：text or pic 微信朋友圈只支持pic）
	 */
	@SuppressLint("NewApi")
	private void shareMsg(String packageName, String activityName,
			String appname, String msgTitle, String msgText, int type,
			String imgpath,String typeName) {
		if (!packageName.isEmpty() && !isAvilible(context, packageName)) {// 判断APP是否存在
			final  String unInstallName = appname;
			if(context != null && context instanceof  Activity){
				((Activity) context).runOnUiThread(new Runnable() {
					@Override
					public void run() {
						Toast.makeText(context, "请先安装" + unInstallName, Toast.LENGTH_SHORT)
								.show();
					}
				});
			}

			return;
		}
		Intent intent = new Intent("android.intent.action.SEND");
		if (type == AndroidNativeShareUtils.TEXT) {
			intent.setType("text/plain");
		} else if (type == AndroidNativeShareUtils.DRAWABLE && !TextUtils.isEmpty(imgpath)) {
			File file = new File(imgpath);
			if (file != null && file.exists() && file.isFile()) {
				Bitmap bitmap = ImageUtils.zoomImage(file, 100, 100);
				if(bitmap == null){
					intent.setType("text/plain");
				} else {
					intent.setType("image/*");
					Uri u = Uri.fromFile(file);
					intent.putExtra(Intent.EXTRA_STREAM, u);
				}
			}else{
            	intent.setType("text/plain");
            }
		} else {
			intent.setType("text/plain");
		}
		intent.putExtra(Intent.EXTRA_SUBJECT, appname+"分享");
		intent.putExtra(Intent.EXTRA_TEXT, msgText);
		intent.putExtra("Kdescription", msgText);
		if (!packageName.isEmpty()) {
			intent.setComponent(new ComponentName(packageName, activityName));
			if(context != null){
				try {
					context.startActivity(intent);
					if(!TextUtils.isEmpty(typeName)){
						StatService.onEvent(context, "031", typeName, 1);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				ToastUtils.showText("分享失败,请重试");
			}
		} else {
			if(context != null){
				try {
					context.startActivity(Intent.createChooser(intent, appname + "分享"));
					if(!TextUtils.isEmpty(typeName)){
						StatService.onEvent(context, "031", typeName, 1);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				ToastUtils.showText("分享失败,请重试");
			}
		}
		
	}


	/**
	 * 点击分享的代码
	 *
	 * @param packageName
	 *            （包名）
	 * @param activityName
	 *            （类名）
	 * @param appname
	 *            （应用名）
	 * @param msgTitle
	 *            （标题）
	 * @param msgText
	 *            （内容）
	 * @param type
	 *            （发送类型：text or pic 微信朋友圈只支持pic）
	 */
	@SuppressLint("NewApi")
	private void shareMsg(String packageName, String activityName,
						  String appname, String msgTitle, String msgText, int type,
						  ArrayList<File> files,String typeName) {
		if (!packageName.isEmpty() && !isAvilible(context, packageName)) {// 判断APP是否存在
			Toast.makeText(context, "请先安装" + appname, Toast.LENGTH_SHORT)
					.show();
			return;
		}
		Intent intent = new Intent("android.intent.action.SEND");
		if (type == AndroidNativeShareUtils.TEXT) {
			intent.setType("text/plain");
		} else if (type == AndroidNativeShareUtils.DRAWABLE && files != null) {
			ArrayList<Uri> imageUris = new ArrayList<Uri>();
			for (File f : files) {
				if(f != null && f.exists()){
					imageUris.add(Uri.fromFile(f));
				}
			}
			if (imageUris.size() > 0) {
				intent.setType("image/*");
				intent.setAction(Intent.ACTION_SEND_MULTIPLE);
				intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
//				intent.putExtra(Intent.EXTRA_STREAM, imageUris.get(1));
//				intent.putExtra(Intent.EXTRA_STREAM, imageUris.get(2));
			} else {
				intent.setType("text/plain");
			}
		} else {
			intent.setType("text/plain");
		}
		intent.putExtra(Intent.EXTRA_SUBJECT, appname+"分享");
//		intent.putExtra(Intent.EXTRA_TEXT, msgText);
		intent.putExtra("Kdescription", msgText);
		if (!packageName.isEmpty()) {
			intent.setComponent(new ComponentName(packageName, activityName));
			if(context != null){
				try {
					context.startActivity(intent);
					if(!TextUtils.isEmpty(typeName)){
						StatService.onEvent(context, "031", typeName, 1);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				ToastUtils.showText("分享失败,请重试");
			}
		} else {
			if(context != null){
				try {
					context.startActivity(Intent.createChooser(intent, appname + "分享"));
					if(!TextUtils.isEmpty(typeName)){
						StatService.onEvent(context, "031", typeName, 1);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}else{
				ToastUtils.showText("分享失败,请重试");
			}
		}

	}

	/**
	 * 判断相对应的APP是否存在
	 *
	 * @param context
	 * @param packageName
	 * @return
	 */
	public boolean isAvilible(Context context, String packageName) {
		if(context == null){
			context = AppApplication.getInstance();
		}
		PackageManager packageManager = context.getPackageManager();

		List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
		for (int i = 0; i < pinfo.size(); i++) {
			if (((PackageInfo) pinfo.get(i)).packageName
					.equalsIgnoreCase(packageName))
				return true;
		}
		return false;
	}
}
